#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	/*
	* 2025.8.3 开启时钟；所有的引脚都被接入到APB2总线上
	* 2025.8.4 开启APB2总线上的片上外设的时钟
	*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//开启GPIOB的时钟
															//使用各个外设前必须开启时钟，否则对外设的操作无效
	
	/*
	* 2025.8.4 创建IO结构体
	* GPIO初始化，通用目的输入输出引脚初始化
	*/
	GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量

	//GPIO模式，赋值为推挽输出模式
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	//2025.8.3: GPIO引脚，GPIO_Pin_All为所有针脚
	//2025.8.4: 指定多个引脚用这种方式 GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
	//2025.8.4: 指定1个引脚： GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

	//每一个引脚，都有一个复杂的线路，所以它才会支持4种输入、4种输出，合计8种模式。

	//2025.8.3: 速度支持3种选择： GPIO_Speed_2MHz, GPIO_Speed_10MHz, GPIO_Speed_50MHz
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度，赋值为50MHz
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOA的初始化
	/* 主循环，循环体内的代码会一直循环执行 */
	while (1)
	{
		/* 设置PA0引脚的高低电平，实现LED闪烁，下面展示3种方法 */
		
		/* 方法1：GPIO_ResetBits设置低电平，GPIO_SetBits设置高电平 */
		//将PA0引脚设置为低电平
		GPIO_ResetBits(GPIOA, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
		//延时500ms
		Delay_ms(500);										
		//将PA0引脚设置为高电平
		GPIO_SetBits(GPIOA, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
		//延时500ms
		Delay_ms(500);										

		/* 方法2：GPIO_WriteBit设置低/高电平，由Bit_RESET/Bit_SET指定 */
		//将PA1引脚设置为低电平
		/* 给PA1输出一个低电平，点亮LED */
		GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);		//将PA0引脚设置为低电平
		//延时500ms
		Delay_ms(500);										
		//将PA1引脚设置为高电平
		GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
		//延时500ms		
		Delay_ms(500);										

        /* 方法3：GPIO_WriteBit设置低/高电平，由数据0/1指定，数据需要强转为BitAction类型 */
		//将PA2引脚设置为低电平
	    GPIO_WriteBit(GPIOA, GPIO_Pin_2, (BitAction)0);
	    //延时500ms
		Delay_ms(500);
		//将PA2引脚设置为高电平
		GPIO_WriteBit(GPIOA, GPIO_Pin_2, (BitAction)1);
		//延时500ms
		Delay_ms(500);
	}
}
